﻿''' <summary>
''' Clase encargada de generar los torneos del campeonato
''' </summary>
''' <author>Juan David Cabezuelo, Arturo Sirvent, Fermín Martínez, Eugenio Cañete y Pablo Vicedo</author>
''' 
Public Class GenerarTorneo
    Private yaDescansado As List(Of Integer)
    Private equipos As List(Of Integer)
    Private ronda As Integer
    Dim MaxIdPartidos As Integer
    Dim bd As BaseDatos

    ''' <summary>
    ''' Constructor encargado de inicializar las variables
    ''' </summary>
    ''' <param name="listaEquiposString"></param>
    ''' <param name="MaxIdPartidos"></param>
    ''' <remarks></remarks>
    Public Sub New(ByVal listaEquiposString As List(Of String), ByVal MaxIdPartidos As Integer)
        bd = New BaseDatos
        Me.MaxIdPartidos = MaxIdPartidos
        yaDescansado = New List(Of Integer)
        Me.equipos = New List(Of Integer)
        Me.equipos.Clear()
        For Each id As String In listaEquiposString
            equipos.Add(CInt(id))
        Next
        ronda = 1
        generarTorneos(equipos)
    End Sub
    ''' <summary>
    ''' Proceso que genera la primera ronda de los torneos y llama al proceso recursivo "siguienteRonda"
    ''' Recive una lista con los IDs de los equipos y si es impar añade el ID -1  
    ''' </summary>
    ''' <param name="equipos"></param>
    ''' <remarks></remarks>
    Public Sub generarTorneos(ByVal equipos As List(Of Integer))

        If equipos.Count Mod 2 <> 0 Then
            equipos.Add(-1)
        End If

        'primera ronda
        Debug.WriteLine("RONDA " & ronda)
        For i As Integer = 0 To equipos.Count - 1 Step 2
            Debug.WriteLine(equipos(i) & " -----")
            Debug.WriteLine("       |-")
            Debug.WriteLine(equipos(i + 1) & " -----")
            Debug.WriteLine("")

            MaxIdPartidos += 1
            Debug.WriteLine("Insert into Partidos(Id, IdTorneo, IdRonda, IdEquipo, Set1, Set2, Set3) values(" _
            & MaxIdPartidos & "," & FormEntrada.CampeonatoActivo & "," & ronda & "," & equipos(i) & ",0, 0, 0)")
            bd.InsertarModificarBorrar("Insert into Partidos(Id, IdTorneo, IdRonda, IdEquipo, Set1, Set2, Set3) values(" _
            & MaxIdPartidos & "," & FormEntrada.CampeonatoActivo & "," & ronda & "," & equipos(i) & ",0, 0, 0)")
            Debug.WriteLine("Insert into Partidos(Id, IdTorneo, IdRonda, IdEquipo, Set1, Set2, Set3) values(" _
            & MaxIdPartidos & "," & FormEntrada.CampeonatoActivo & "," & ronda & "," & equipos(i + 1) & ",0, 0, 0)")
            bd.InsertarModificarBorrar("Insert into Partidos(Id, IdTorneo, IdRonda, IdEquipo, Set1, Set2, Set3) values(" _
            & MaxIdPartidos & "," & FormEntrada.CampeonatoActivo & "," & ronda & "," & equipos(i + 1) & ",0, 0, 0)")
        Next

        'siguientes rondas
        siguienteRonda(equipos)
    End Sub
    ''' <summary>
    ''' Proceso que se llama recursivamente generando las siguientes rondas hasta que el número de equipos es 2
    ''' </summary>
    ''' <param name="equipos"></param>
    ''' <remarks></remarks>
    Private Sub siguienteRonda(ByVal equipos As List(Of Integer))
        Dim equiposAux As List(Of Integer) = New List(Of Integer)
        For i As Integer = 1 To CInt(equipos.Count / 2)
            equiposAux.Add(i)
        Next

        If equiposAux.Count >= 2 Then
            If equiposAux.Count Mod 2 <> 0 Then
                equiposAux.Insert(equiposAux.Count - 2, -1)
            End If

            ronda += 1
            Debug.WriteLine("RONDA " & ronda)
            For i As Integer = 0 To equiposAux.Count - 1 Step 2
                Debug.WriteLine(equiposAux(i) & " -----")
                Debug.WriteLine("       |-")
                Debug.WriteLine(equiposAux(i + 1) & " -----")
                Debug.WriteLine("")
                MaxIdPartidos += 1
                If equipos(i) <> 0 Then
                    Debug.WriteLine("Insert into Partidos(Id, IdTorneo, IdRonda, IdEquipo, Set1, Set2, Set3) values(" _
                    & MaxIdPartidos & "," & FormEntrada.CampeonatoActivo & "," & ronda & "," & "0" & ",0, 0, 0)")
                    bd.InsertarModificarBorrar("Insert into Partidos(Id, IdTorneo, IdRonda, IdEquipo, Set1, Set2, Set3) values(" _
                    & MaxIdPartidos & "," & FormEntrada.CampeonatoActivo & "," & ronda & "," & "0" & ",0, 0, 0)")
                    Debug.WriteLine("Insert into Partidos(Id, IdTorneo, IdRonda, IdEquipo, Set1, Set2, Set3) values(" _
                    & MaxIdPartidos & "," & FormEntrada.CampeonatoActivo & "," & ronda & "," & "0" & ",0, 0, 0)")
                    bd.InsertarModificarBorrar("Insert into Partidos(Id, IdTorneo, IdRonda, IdEquipo, Set1, Set2, Set3) values(" _
                    & MaxIdPartidos & "," & FormEntrada.CampeonatoActivo & "," & ronda & "," & "0" & ",0, 0, 0)")
                Else
                    Debug.WriteLine("Insert into Partidos(Id, IdTorneo, IdRonda, IdEquipo, Set1, Set2, Set3) values(" _
                & MaxIdPartidos & "," & FormEntrada.CampeonatoActivo & "," & ronda & "," & "-1" & ",0, 0, 0)")
                    bd.InsertarModificarBorrar("Insert into Partidos(Id, IdTorneo, IdRonda, IdEquipo, Set1, Set2, Set3) values(" _
                    & MaxIdPartidos & "," & FormEntrada.CampeonatoActivo & "," & ronda & "," & "-1" & ",0, 0, 0)")
                    Debug.WriteLine("Insert into Partidos(Id, IdTorneo, IdRonda, IdEquipo, Set1, Set2, Set3) values(" _
                    & MaxIdPartidos & "," & FormEntrada.CampeonatoActivo & "," & ronda & "," & "-1" & ",0, 0, 0)")
                    bd.InsertarModificarBorrar("Insert into Partidos(Id, IdTorneo, IdRonda, IdEquipo, Set1, Set2, Set3) values(" _
                    & MaxIdPartidos & "," & FormEntrada.CampeonatoActivo & "," & ronda & "," & "-1" & ",0, 0, 0)")
                End If

            Next
            siguienteRonda(equiposAux)
        Else
            Return
        End If

    End Sub
End Class
